author: sheng junhui
weibo: @armysheng
blog: youngfor.me
email: armysheng@Gmail.com
转载请注明出处
0. 基本概念的介绍
在搭建开发环境know how的步骤前,最好是先做一些konw what的学习,这里先简单介绍一下一些基本的概念。
0.1 什么是Mahout?
Apache Mahout 翻译成中文是骑大象的人,或驯象师。这里是指Apache开源社区维护的一个可伸缩(Scable)的机器学习库。Mahout机器学习库*目前实现的算法*包括协同滤波,分类,聚类,特征降维等等。我们知道Hadoop的logo是一头大象,而Mahout要做的就是驯服这头大象。Mahout致力于提供可支持超大数据集,支持商业使用的开源机器学习库,并且构建充满活力的开源社区。---Mahout 主页
![]()
0.2 Mahout又是一个Maven项目,Maven又是什么呢?
Apache Maven,是一个软件(特别是Java软件)项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。项目对象模型存储在命名为 pom.xml 的文件中。POM 文件中包含了它的配置信息,依赖信息等等。---Maven wiki
所以,Mahout是一个用java语言开发的,Maven管理工具管理的Maven project,因此整个过程也需要安装Maven。事实上,安装完java, Maven, Mahout 以后,不需要eclipse,整个Mahout机器学习库已经可以被完整的调用,也可以在此基础上进行开发。而eclipse是一个业界广泛使用的IDE,在eclipse上让人得心应手,而且eclipse对Maven项目也有很好的支持,只需要装上M2E插件便可以非常方便的使用。
1. 安装
首先介绍一下开发环境:Win7 32位系统
需要安装的软件: jdk1.7.0_60
+apache-maven-3.2.1
+TortoiseSVN 1.8.7
+mahout-distribution-0.9(源码&&包)
由于我们公司内部走的是代理网络,所以部分工具安装完成使用前,都会介绍如何配置代理信息,如果你使用的是直连网络,请忽视这些段落。
1.1 Java环境的安装
我们选择的java版本是jdk1.7.0_60
,可以在oracle主页下载,这里不建议使用java8,在编译过程中可能会出现一些不必要的问题。java安装比较简单,直接下载二进制文件进行安装。我们安装在D:\Program Files\Java\jdk1.7.0_60
,安装完成后在控制命令行中输入:
|
|
看似java已经可以运行,其实java的环境变量尚未加入,而是在安装过程中,将java.exe,javaw.exe,javawc.exe
三个文件copy到了system32
目录下。所以我们需要手动添加环境变量:
右键计算机->属性->高级系统设置->环境变量->系统变量->新建
变量名
:JAVA_HOME
变量值
:D:\Program Files\Java\jdk1.7.0_60
这一步非常重要,不做的话再Maven的安装上,会出现JAVA_HOME找不到的错误,至此我们完成了JAVA环境的配置。
1.2 Maven环境搭建
Maven 是一个项目管理和构建自动化工具。但是对于我们程序员来说,我们最关心的是它的项目构建功能。所以这里我们介绍的就是怎样用 maven 来满足我们项目的日常需要。 Maven 使用惯例优于配置的原则 。它要求在没有定制之前,所有的项目都有如下的结构:
目录 | 目的 |
---|---|
${basedir} | 存放 pom.xml和所有的子目录 |
${basedir}/src/main/java | 项目的 java源代码 |
${basedir}/src/main/resources | 项目的资源,比如说 property文件 |
${basedir}/src/test/java | 项目的测试类,比如说 JUnit代码 |
${basedir}/src/test/resources | 测试使用的资源 |
一个 maven 项目在默认情况下会产生 JAR 文件,另外 ,编译后 的 classes 会放在 ${basedir}/target/classes 下面, JAR 文件会放在 ${basedir}/target 下面。
在确保JAVA环境已经搭建好的情况下我们开始安装Maven,可以从Maven的主页下载二进制文件,这里我们选择的是Maven 3.2.1,并解压到你常用的软件路径,这里我们安装在D:\Program Files\apache-maven-3.2.1\
。该页的最后也该处了Maven的安装方法。这里我们使用最简单的将Maven的bin路径D:\Program Files\apache-maven-3.2.1\bin
加入到系统变量Path中:
完成后在命令行中输入
mvn --version
查看maven的版本:
代理配置
之前介绍了代理的问题,因为后续的操作,maven会自动联网搜索依赖包,这里在继续操作之前先介绍Maven的代理配置。
在Maven的配置文件都在它的安装目录下的\config\setting.xml文件中<proxies>
字段定义了代理的设置。根据代理情况修改Host,port,username,password等等。这里我们只修改了host和port。
接下来我们用 maven 来建立最著名的“Hello World!”程序,来更好的了解Maven。
**注意:**如果你是第一次运行 maven,你需要 Internet 连接,因为 maven 需要从网上下载需要的插件。
我们要做的第一步是建立一个 maven 项目。在 maven 中,我们是执行 maven 目标 (goal) 来做事情的。
maven 目标和 ant 的 target 差不多。在命令行中执行下面的命令来建立我们的 hello world 项目
|
|
命令执行完后你将看到maven生成了一个名为my-app的目录,这个名字就是你在命令中指定的artifactId,进入该目录,你将发现以下标准的项目结构:
其中:src/main/java 目录包含了项目的源代码,src/test/java 目录包含了项目的测试代码,pom.xml是项目的项目对象模型(Project Object Model or POM)。
之后我们输入
cd my-app
进入该项目
再输入mvn package
回车来build这个项目,得到,折后target目录下回生成该项目的类文件和包:
接着你可以使用以下的命令来测试新编译和打包出来的jar包,
|
|
至此Maven的安装和介绍就到这里,这一章节主要参考了Apache Maven 入门篇 ( 上 )和maven 教程一 入门,以及Maven主页,阅读原文获得更多的了解。
1.3 Mahout源码的编译
Mahout的源码和编译后的包可以从Mahout官网上获得,然而在使用这里下载的0.9发行版源码时,somehow遇到了一些错误。 这里我们选择用SVN获得它最新的源码。Tortoise SVN是大家常用的代码托管工具,可以从它的主页上下载到。 安装完成后,在使用之前,我们还要对他做一下代理配置。
代理配置
SVN的代理配置只需要打开,在开始按钮->程序->Tortoise SVN->settings,找到Network项进行如下配置:
接着我们就可以开始编译源码了 首先得到源码,在命令行输入:
|
|
cd trunk
并编译:
|
|
这里可以选择Hadoop依赖版本,在没有hadoop的情况下,也可以编译。 编译时经常会遇见Test failure的error而卡住,关于这个问题,是由于mahout中有大量的测试例子,test failure是遇到了broken unit test.遇到这种问题要么需要自己去定位修复这个broken test,要么可以等待官方发行并update svn 进行修复。关于这个问题参加这里,一般的解决方法是使用:
|
|
这里我们选的是
|
|
至此,Mahout的源码就编译完毕,我们可以看到每个Mahout源码的目录下都生成了相应的target文件,包含对应的类和.jar包。
1.4 如何在Eclipse上使用Mahout?
编译完后的mahout还是不能在eclipse上使用,下面我们介绍一下如何在eclipse下开发Maven project。
首先Eclipse版本选择,关于eclipse的版本代号问题请参考这里。 我们选择的是Eclipse IDE for Java EE Developers(JUNO),它包含了Maven所需的一些依赖包。Eclipse standard (Indigo)由于缺乏依赖包,在安装上Maven插件上会有问题。eclipse安装包可以在官网下载。
代理配置
eclipse安装完成后,启动会自动检测本机的代理设置,将本机的代理设置填到软件设置界面。但是如果你想修改的话可以在下面找到:
eclipse->windows->perferences->general->Network Connection
接着我们介绍一下m2eclipse插件和它的安装方法。m2eclipse插件是一款一流的支持Apache Maven的eclipse插件。用户可以用它更方便的编辑Maven的pom.xml文件,可以在IDE上build一个Maven工程。
启动eclipse定位到 Help -> Install New Software…
点击Add
,分别填入:
Name
:m2e
Location
:http://download.eclipse.org/technology/m2e/releases
点击
next
,同意协议,确认warning后安装。安装完成后,eclipse会提示你重启。
安装完成后我们还需要做一些设置
定位到
eclipse -> windows -> preference -> Maven ->Installations
将本地的Maven路径Add
进来。
将
User-setting
定位到Maven安装路径下的.\conf\setting.xml
文件。
这样我们就完成了插件的安装,我们便可以Import我们之前已经编译好的Mahout源码,在eclipse下方便的查看Mahout的类文件。
导入时可能会遇到Maven-scala-plugin缺失的情况,点击
finish
会自动找到缺失的plugin并且安装(需重启eclipse)。
导入buliding workspace 后,提示了有错误:
error:Plugin execution not covered by lifecycle configuration: org.scala-tools:maven-scala-plugin:2.15.2:testCompile (execution: default, phase: test-compile)
这是由于m2eclipse-scala插件的缺失,The default maven plugin does not support Scala out of the box, so you need to install the m2eclipse-scala connector.
即m2eclipse-scala connector 的缺失。所以我们需要再次安装这个插件,方法和上面的类似。
Add
:
Name
: Maven for Scala
Location
:http://alchim31.free.fr/m2e-scala/update-site/
(若错误持续,则右键改project-> Maven -> Update Project)
2. 简单推荐算法的实现
接着我们介绍如何用Mahout来建立简单的推荐算法,大部分过程我们follow了官方的这个quick guide
Step 0:创建数据集,命名为Dataset.csv,内容如下:
1,10,1.0
1,11,2.0
1,12,5.0
1,13,5.0
1,14,5.0
1,15,4.0
1,16,5.0
1,17,1.0
1,18,5.0
2,10,1.0
2,11,2.0
2,15,5.0
2,16,4.5
2,17,1.0
2,18,5.0
3,11,2.5
3,12,4.5
3,13,4.0
3,14,3.0
3,15,3.5
3,16,4.5
3,17,4.0
3,18,5.0
4,10,5.0
4,11,5.0
4,12,5.0
4,13,0.0
4,14,2.0
4,15,3.0
4,16,1.0
4,17,4.0
4,18,1.0
Step 1: 新建一个Maven Project,选择simple project
Step 3:打开pom.xml
文件,加入Mahout的依赖配置,并将Dataset.csv放到工程目录下
|
|
Step 4: 在src\main\java\
下新建SampleRecommender.java
|
|
Step 5: 运行项目,run as java application
我们便得到推荐结果:
RecommendedItem[item:12, value:4.8328104]
RecommendedItem[item:13, value:4.6656213]
RecommendedItem[item:14, value:4.331242]
至此我们便完成了简单的一个推荐算法。
总结
总结来说我们安装了jdk,安装了Maven,安装了Eclipse以及在eclipse上使用Maven所需的一些插件,最后我们能够顺利地查看和修改Mahout的源码。
**Tips:**环境配置中会遇到许多问题,请多谷歌,国内如果访问不够顺畅,请直接使用一些谷歌的服务器IP来流畅访问,你也可以将浏览器的默认搜索改为这个地址。